package jobs.jsf.event;

import java.util.List;
import javax.faces.model.ListDataModel;
import jobs.pattern.structural.EntityDecorator;
import org.primefaces.model.SelectableDataModel;

/**
 * Nos permite seleccionar un modelo de selección.
 *
 * @author Paul Tamayo
 */
public class TableModelSelectable<T extends EntityDecorator> extends ListDataModel<EntityDecorator> implements SelectableDataModel<EntityDecorator> {

    /**
     * Constructor por defecto.
     */
    public TableModelSelectable() {
    }

    /**
     * Constructor que nos permite inicializar una lista de entidades.
     *
     * @param entities
     */
    public TableModelSelectable(List<EntityDecorator> entities) {
        super(entities);
    }

    /**
     * Nos devuelve el identificador de la entidad.
     *
     * @param entity Entidad de la cual va o obtener el identificador.
     * @return Identificador
     */
    @Override
    public Object getRowKey(EntityDecorator entity) {
        return entity.getId();
    }

    /**
     * Dado el identificador nos devuelve la entidad.
     *
     * @param id Identificador
     * @return Devuelve la entidad con el identificador pasado por parámetro.
     */
    @Override
    public EntityDecorator getRowData(String id) {
        List<EntityDecorator> entities = (List<EntityDecorator>) getWrappedData();

        for (EntityDecorator entity : entities) {
            if (entity.getId().toString().compareTo(id) == 0) {
                return entity;
            }
        }

        return null;
    }
}
